מושגים: קשיר. o בעל 1 קשתות בדיוק.

Σχετικά έγγραφα
ל הזכויות שמורות לדפנה וסטרייך

logn) = nlog. log(2n

פתרון תרגיל מרחבים וקטורים. x = s t ולכן. ur uur נסמן, ur uur לכן U הוא. ur uur. ur uur

חורף תש''ע פתרון בחינה סופית מועד א'

פתרון תרגיל 8. מרחבים וקטורים פרישה, תלות \ אי-תלות לינארית, בסיס ומימד ... ( ) ( ) ( ) = L. uuruuruur. { v,v,v ( ) ( ) ( ) ( )

כלליים זמן: S מחסנית, top(s) ראש המחסנית. (Depth First Search) For each unmarked DFS(v) / BFS(v) רקורסיבי. אלגוריתם :BFS

. {e M: x e} מתקיים = 1 x X Y

שדות תזכורת: פולינום ממעלה 2 או 3 מעל שדה הוא פריק אם ורק אם יש לו שורש בשדה. שקיימים 5 מספרים שלמים שונים , ראשוני. שעבורם

מתמטיקה בדידה תרגול מס' 13

אלגוריתמים / תרגיל #1

משוואות רקורסיביות רקורסיה זו משוואה או אי שוויון אשר מתארת פונקציה בעזרת ערכי הפונקציה על ארגומנטים קטנים. למשל: יונתן יניב, דוד וייץ

פתרון תרגיל 5 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד

' 2 סמ ליגרת ןורתפ םיפרגה תרותב םימתירוגלא דדצ 1 : הלאש ןורתפ רבסה תורעה

יסודות לוגיקה ותורת הקבוצות למערכות מידע (סמסטר ב 2012)

מבני נתונים ואלגוריתמים תרגול #11

מבני נתונים ואלגוריתמים תרגול #8-9

gcd 24,15 = 3 3 =

תרגיל 13 משפטי רול ולגראנז הערות

תורת הגרפים - סימונים

אלגוריתמים בתורת הגרפים חלק ראשון

Logic and Set Theory for Comp. Sci.

= 2. + sin(240 ) = = 3 ( tan(α) = 5 2 = sin(α) = sin(α) = 5. os(α) = + c ot(α) = π)) sin( 60 ) sin( 60 ) sin(

[ ] Observability, Controllability תרגול 6. ( t) t t קונטרולבילית H למימדים!!) והאובז' דוגמא: x. נשתמש בעובדה ש ) SS rank( S) = rank( עבור מטריצה m

חידה לחימום. כתבו תכappleית מחשב, המקבלת כקלט את M ו- N, מחליטה האם ברצוappleה להיות השחקן הפותח או השחקן השappleי, ותשחק כך שהיא תappleצח תמיד.

לוגיקה ותורת הקבוצות פתרון תרגיל בית 4 אביב תשע"ו (2016)

גבול ורציפות של פונקציה סקלרית שאלות נוספות

הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות

דף פתרונות 7 נושא: תחשיב הפסוקים: צורה דיסיונקטיבית נורמלית, מערכת קשרים שלמה, עקביות

תרגול פעולות מומצאות 3

לוגיקה ותורת הקבוצות פתרון תרגיל בית 8 חורף תשע"ו ( ) ... חלק ראשון: שאלות שאינן להגשה נפריד למקרים:

תרגול מס' 6 פתרון מערכת משוואות ליניארית

הגדרה: מצבים k -בני-הפרדה

אלגוריתמים בתורת הגרפים חלק שני

{ : Halts on every input}

שאלה 1 V AB פתרון AB 30 R3 20 R

( )( ) ( ) f : B C היא פונקציה חח"ע ועל מכיוון שהיא מוגדרת ע"י. מכיוון ש f היא פונקציהאז )) 2 ( ( = ) ( ( )) היא פונקציה חח"ע אז ועל פי הגדרת

פרק 8: עצים. .(Tree) במשפטים הגדרה: גרף ללא מעגלים נקרא יער. דוגמה 8.1: תרגילים: הקודקודים 2 ו- 6 בדוגמה הוא ).

מתכנס בהחלט אם n n=1 a. k=m. k=m a k n n שקטן מאפסילון. אם קח, ניקח את ה- N שאנחנו. sin 2n מתכנס משום ש- n=1 n. ( 1) n 1

תכנון אלגוריתמים 2016 עבודה 1 שאלה 1 פתרון נתונות שתי בעיות. יש למצוא: אורך מסלול קצר ביותר המתחיל באחד מן הקודקודים s 1,..., s k ומסתיים ב t.

גרפים אלגוריתמים בתורת הגרפים הרצאה 1 גיא פלג 15 במרץ 2012 הגדרה: מגן דוגמאות: זוגות לא סדורים כיוון שבקבוצה סדר לא חשוב.

סדרות - תרגילים הכנה לבגרות 5 יח"ל

מודלים חישוביים פתרון תרגיל 5

מבני נתונים ויעילות אלגוריתמים

brookal/logic.html לוגיקה מתמטית תרגיל אלון ברוק

צעד ראשון להצטיינות מבוא: קבוצות מיוחדות של מספרים ממשיים

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 315, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן

x a x n D f (iii) x n a ,Cauchy

לדוגמה: במפורט: x C. ,a,7 ו- 13. כלומר בקיצור

מבני נתונים 08a תרגול 8 14/2/2008 המשך ערמות ליאור שפירא

אלגברה ליניארית (1) - תרגיל 6

ניהול תמיכה מערכות שלבים: DFfactor=a-1 DFt=an-1 DFeror=a(n-1) (סכום _ הנתונים ( (מספר _ חזרות ( (מספר _ רמות ( (סכום _ ריבועי _ כל _ הנתונים (

מתמטיקה בדידה תרגול מס' 5

c ארזים 26 בינואר משפט ברנסייד פתירה. Cl (z) = G / Cent (z) = q b r 2 הצגות ממשיות V = V 0 R C אזי מקבלים הצגה מרוכבת G GL R (V 0 ) GL C (V )

אלגוריתמים בתורת הגרפים חלק רביעי

תורישק :תורישקה תייעבב בוש ןייענ?t- t ל s- s מ לולסמ שי םאה 2

אלגברה לינארית (1) - פתרון תרגיל 11

אלגברה מודרנית פתרון שיעורי בית 6

תכנון דינאמי. , p p p והמטריצה המתקבלת היא בגודל

אלגוריתמים סמסטר א' תשע"ב מרצים: פרופ' עמוס פיאט ופרופ' מיכה שריר. מתרגלים: שי ורדי ואדם שפר.

פתרונות , כך שאי השוויון המבוקש הוא ברור מאליו ולכן גם קודמו תקף ובכך מוכחת המונוטוניות העולה של הסדרה הנתונה.

תרגול 1 חזרה טורי פורייה והתמרות אינטגרליות חורף תשע"ב זהויות טריגונומטריות

I. גבולות. x 0. מתקיים L < ε. lim אם ורק אם. ( x) = 1. lim = 1. lim. x x ( ) הפונקציה נגזרות Δ 0. x Δx

מודלים חישוביים תרגולמס 5

מבחן מועד ב' בהצלחה! אנא קיראו היטב את ההוראות שלהלן: ודאו כי כל עמודי הבחינה נמצאים בידכם.

פתרון תרגיל 6 ממשוואות למבנים אלגברה למדעי ההוראה.

co ארזים 3 במרץ 2016

מתמטיקה בדידה תרגול מס' 12

אינפי - 1 תרגול בינואר 2012

רשימת בעיות בסיבוכיות

תרגיל 7 פונקציות טריגונומטריות הערות

מבני נתונים (234218) 1

תרגול משפט הדיברגנץ. D תחום חסום וסגור בעל שפה חלקה למדי D, ותהי F פו' וקטורית :F, R n R n אזי: נוסחת גרין I: הוכחה: F = u v כאשר u פו' סקלרית:

תרגול מס' 1 3 בנובמבר 2012

אלגוריתמים 1, סמסטר אביב 2017

אוטומט סופי דטרמיניסטי מוגדר ע"י החמישייה:

חידה לחימום. כתבו תכנית שהקלט שלה הוא מספר שלם n,

מודלים חישוביים מבחן מועד א', סמסטר א' תשע''ה (2015)

סיכום בנושא של דיפרנציאביליות ונגזרות כיווניות

השאלות..h(k) = k mod m

תוכן עניינים I בעיות מיון 2 1 סימון אסימפטוטי... 2 II מבני נתונים 20 8 מבני נתונים מופשטים משפט האב גרפים... 37

מבני נתונים אדמיניסטרציה ד"ר אלכס סמורודניצקי, רוס 210, שני 5:30 4:15. ציון:

מצולעים מצולעהוא צורה דו ממדית,עשויה קו"שבור"סגור. לדוגמה: משולש, מרובע, מחומש, משושה וכו'. לדוגמה:בסרטוט שלפappleיכם EC אלכסוןבמצולע.

סיכום- בעיות מינימוםמקסימום - שאלון 806

סיכום חקירת משוואות מהמעלה הראשונה ומהמעלה השנייה פרק זה הינו חלק מסיכום כולל לשאלון 005 שנכתב על-ידי מאיר בכור

(2) מיונים השאלות. .0 left right n 1. void Sort(int A[], int left, int right) { int p;

אלגברה ליניארית 1 א' פתרון 2

מבני נתונים ואלגוריתמים תרגול #3 נושאים: תור קדימויות/ערימה, עצים

תרגילים באמצעות Q. תרגיל 2 CD,BF,AE הם גבהים במשולש .ABC הקטעים. ABC D נמצאת על המעגל בין A ל- C כך ש-. AD BF ABC FME

1 תוחלת מותנה. c ארזים 3 במאי G מדיד לפי Y.1 E (X1 A ) = E (Y 1 A )

קבוצה היא שם כללי לתיאור אוסף כלשהו של איברים.

חישוביות הרצאה 4 לא! זיהוי שפות ע''י מכונות טיורינג הוכחה: הגדרת! : f r

עצי 2-3 תזכורת: בנים. דוגמאות: Chapter 19: B trees ( ) Chapter 15: Augmenting data structures ( )

מבני נתונים עצים שיעור 7

CHAIN MATRIX MULTIPLICATION וגיא בן-חורין

3-9 - a < x < a, a < x < a

רשימת משפטים והגדרות

s ק"מ קמ"ש מ - A A מ - מ - 5 p vp v=

מיון. 1 מיון ערימה (Heapsort) חלק I 1.1 הגדרת ערימה 0.1 הגדרה של המושג מיון מסקנה: הערך הכי גבוה בערימה נמצא בשורש העץ!

1 סכום ישר של תת מרחבים

התפלגות χ: Analyze. Non parametric test

Transcript:

1 גרפים / חזרה כללית: סיכומים למבחן בקורס אלגוריתמים סמסטר א' 2008-9 (פרופ' מיכה שריר) מושגים: גרף: גרף,, V קבוצת קודקודים, קבוצת קשתות. מכוון: הקשתות הן זוגות סדורים, לא מכוון: הקשתות הן קבוצה בת שני איברים (הסדר הפנימי לא חשוב). לולאה: -, קשת מקודקוד לעצמו. קשתות מקבילות ואנטי מקבילות: קשתות בין אותם שני קודקודים (גרף לא מכוון; בגרף מכוון: כיוונים זהים). קשתות אנטי מקבילות: בגרף מכוון בלבד, קשתות בין אותם שני קודקודים אך בכיוונים הפוכים. גרף פשוט: גרף ללא קשתות מקבילות, אנטי מקבילות ולולאות. שכנות (צמתים): תהי קשת,, אזי a,b הן נקודות קצה של הקשת, ו- a ו- b שכנים אחד של השני. סמיכות (קשתות): זוג קשתות יקראו סמוכות אם יש להן נקודת קצה משותפת. דרגת צומת: מספר הקשתות היוצאות ממנו והנכנסות אליו. הגדרת דרגת יציאה ודרגת כניסה בהתאם. קודקוד מבודד: קודקוד שדרגתו 0. אם רק דרגת הכניסה שלו 0, יקרא מקור, ואם רק דרגת היציאה שלו 0, יקרא בור. תת-גרף: של, הוא גרף, כךש-, ו-. תת-גרף מושרה: תת-גרף הכולל את כל הקשתות ב- E המחברות את הצמתים ב-' V. מסילה/מסלול: סדרת צמתים,, כך שלכל 1., :1 אורך המסלול = מספר הקשתות בו. מעגל: מסלול כך ש-. מסלול/מעגל פשוט: אין חזרה על צמתים. קליק,Clique) לא מכוון): תת קבוצה של צמתים בה כל צומת מחובר לכל צומת אחר. גרף שלם: גרף בו V מהווה קליק, כלומר כל צומת בגרף מחובר בקשת לא מכוונת לכל צומת אחר בגרף. קבוצה ב"ת :(IS) ההיפך מקליק, תת קבוצה של צמתים בה אף זוג צמתים אינו מחובר בקשת. גרף דו-צדדי (לא מכוון): V הוא איחוד זר של 2 תתי קבוצות, ו-. כלומר, כל קשת מחבר בין צומת ב- לצומת ב-. נגישות: צומת u יהיה נגיש מצומת v אם קיים מסלול מ- v ל- u (כל צומת נגיש מעצמו). גרף קשיר (לא מכוון): גרף בו כל צומת נגיש מכל צומת אחר בגרף. רכיב קשירות: אם גרף אינו קשיר, רכיבי קשירות הם תתי-קבוצות מקסימליות של צמתים מהגרף כך שהגרף המושרה של כל תת-קבוצה כזו הוא גרף קשיר. כל גרף מתפרק לרכיבי קשירות זרים בצמתים ובקשתות. גרף קשיר בחוזקה: כל צומת נגיש מכל צומת אר בגרף במסלול מכוון. רכיב קשירות חזקה (רק"ח): אם גרף מכוון אינו קשיר חזקה, ניתן לפרקו לרכיבי קשירות חזקה שהם תתי-קבוצות מקסימליות של צמתים שתת הגרף המושרה של כל תת-קבוצה הוא גרף קשיר בחוזקה. בניגוד למקרה הלא מכוון, כאן יתכנו קשתות בין רק"חים. - DAG גרף אציקלי מכוון: גרף מכוון חסר מעגלים. ייצוג של גרפים:.1 עץ: DAG שהוא גם קשיר. אם אינו קשיר, אך כן חסר מעגלים, יהיה יער (כל רכיב קשירות שלו הוא עץ). תכונות עץ: קשיר. o כל שתיים מהתכונות האלה גוררות שזהו עץ חסר מעגלים. o בעל 1 קשתות בדיוק. o בין כל שני צמתים קיים מסלול אחד ויחיד. o עץ מכוון: עץ בו צומת כלשהו מוגדר כשורש, וכל הקשתות מכוונות אליו / ממנו. רשימות שכנות: לכל צומת יש מצביע לרשימת הצמתים השכנים לו. יתרון: זול בזיכרון, ; חסרון: יקר להגיע לכל שכן. מטריצת שכנויות: מטריצה בה.,1, יתרון: גישה מהירה; חסרון: בזבוז מקום (עבור גרפים מועטי קשתות). 0, /.2

2 :BFS: Breadth First Search חיפוש לרוחב: עבור גרף נתון, (מכוון או לא, נתייחס למכוון) וצומת התחלה s, האלגוריתם מבקר בכל צמתי הגרף הנגישים מ- s בלבד. הבדיקה נעשית על צמתים לפי סדר מרחקם מ- s : לכל שכבת מרחק תבוצע הבדיקה על כל הצמתים באותה שכבה לפני מעבר לשכבה הבאה. נחשב לכל צמתי הגרף את המק"ב (מסלול קצר ביותר) מ- s אליהם. לכל נחזיק: : אורך המסלול הקצר ביותר מ- s אל u שנתגלה עד כה. : מצביע לצומת הקודם באותו מק"ב שנתגלה עד כה. אופן פעולת האלגוריתם: משתמשים בתור המחזיק תחילה את s עם שדות מאותחלים:. 0, עבור כל צומת u שנוציא מהתור, החל ב- s, נבצע: לכל שכן v הנגיש מ- u נעדכן את שדותיו: 1., לאחר עדכון כל השכנים נצבע את u באפור, אינדיקציה לכך שעברנו עליו. נוציא את הצומת הבא מהתור ונבצע את אותן פעולות עד סיום. אם צבעו אפור, נדלג עליו (כבר בוצעו עליו הפעולות). סיבוכיות: (לינארית). סימון למק"ב: =, אורך המסלול הקצר ביותר מ- s אל u, או אם לא קיים מסלול מ- s אל u. תכונות וטענות:.1.2 כל תת מסלול של מק"ב הוא מק"ב. אם, אזי 1.,,.3 אם, הקשת האחרונה במק"ב מ- s אל,u אז 1.,,.4.5 אם u נגיש מ- s, אזי האלגוריתם מבקר בצומת u. בכל רגע, בתור Q נמצאים צמתים עם לכל היותר 2 ערכי d עוקבים בסדר d עולה. משפט: לכל צומת u מתקיים:, (טענת עזר: במהלך ריצת האלג' מתקיים לכל,:u.( שימושים: שאלת הנגישות מ- s. מציאת מק"בים מכל צומת נגיש מ- s. המק"ב יהיה רשימת הצמתים ההפוכה למצביעי ה- מ -u. הערות: האלג' מסדר את הצמתים הנגישים מ- s בשכבות לפי ערך ה- d שלהן. למשל s יהיה הצומת היחיד בשכבה 0. טענה: בגרף מכוון: כל קשת שאינה בשימוש ה- BFS מחברת כל צומת בשכבה j לצמתים בשכבה 1. בגרף לא מכוון: כל קשת מחברת צמתים באותה שכבה או בשכבות סמוכות. מצביעי ה- מהווים עץ מכוון שקשתותיו מצביעות לכיוון השורש, ושורשו הוא s. זהו עץ המק"בים. גרף לא מכוון הוא דו-צדדי לא קיים בו מעגל באורך אי זוגי. : אם גרף הוא דו"צ, כל צומת מעבירה אותנו מ- אל וחזרה, ולכן כדי לחזור לאותו צומת צריך מספר זוגי של קשתות במעגל. : מריצים מצומת s כלשהו.BFS מסתכלים על חלוקת הצמתים לפי השכבות המתקבלות מה- BFS. נטען שלא קיימות קשתות המחברות שני צמתים באותה שכבה j, אחרת היינו מקבלים מעגל שאורכו 2 1 (אי זוגי, בניגוד להנחה). לפיכך, כל קשת מחברת לצומת בשכבות הסמוכות (מההערות לעיל), ולכן נוכל לחלק את צמתי הגרף לשתי קבוצות לפי השכבות הזוגיות והאי זוגיות. לכן הגרף הוא דו"צ. תרגילים לדוגמא (מהתרגול):.1 עבור, (מכוון או לא), צור את גרף המק"בים מ-.., 1 אם פתרון: מריצים BFS מ- s, ונגדיר את הגרף החדש 'G באופן הבא:, הגרף לא מכוון, אז 1 או 1.,.2 עבור,, צור את גרף המק"ביםמ- ל-. פתרון: ניצור את גרף המק"בים מ- s שנסמנו 'G. אם t לא מופיע בו אזי אין מסלול מ- s אל t ונחזיר את הגרף הריק. אחרת נהפוך את כיווני הקשתות ב-' G ונמצא גרף מק"בים מ- t מתוך 'G, נסמנו ''G. נהפוך חזרה את קשתות ''G ונחזיר אותו הוא גרף המק"בים מ- s אל t.

3 מסלול ומעגל אויילר (מהתרגול): הגדרה: טענות: מעגל אויילר: מעגל (לא בהכרח פשוט) שעובר על כל קשת בדיוק פעם אחת. מסלול אויילר: אותו דבר רק מסלול. גרף לא מכוון וקשיר מכיל מעגל אויילר דרגות כל הצמתים בו זוגיות. כמו כן ניתן למצוא מעגל אויילר ב-. רעיון ההוכחה: אם גרף מכיל מעגל אויילר, כל פעם שנכנסים לצומת u גם יוצאים ממנו, לכן כל מעבר בצמתים הוא במספר זוגי של קשתות. צומת ההתחלה: הקשת הראשונה תורמת 1, האחרונה 1, וכל מעבר 2, לכן סה"כ זוגי. אם דרגות כל הצמתים זוגיות, נבנה מעגל באופן הבא: מתחילים מצומת u כלשהו. ממשיכים במסלול ממנו עד שחוזרים אליו, כאשר כל קשת שעוברים בדרך מוציאים מ- E. אם נותרו קשתות ב- E, נחזור על שלבים אלו החל מצומת u הנמצא על המעגל שבנינו עד כה ונותרו לו קשתות ב- E. נמשיך עד ש-. גרף לא מכוון וקשיר מכיל מסלול אויילר בגרף שני קודקודים מדרגה אי-זוגית והשאר בעלי דרגה זוגית. הוכחה דומה. גרף מכוון וקשיר מכיל מעגל אויילר : (דרגות היציאה והכניסה של כל צומת שוות). גרף מכוון וקשיר מכיל מסלול אויילר קיימים שני צמתים u,v כך ש: 1, 1 ולכל צומת, מתקיים: (ברור למה). :DFS: Depth First Search חיפוש לעומק: בשונה מה- BFS, בעת מציאת שכן של צומת, חא נמשיך לשאר שכניו אלא נמשיך לפתח את אותו שכן. רק כאשר יתקע יחזור אחורה וימשיך לשאר. שתי פרוצדורות: :DFS(G) מנהלת את החיפוש ע"י מעבר על כל צמתי הגרף, ועבור כל צומת שלא נתקלנו בו כבר (לפי שדה צבע), מבצעת ממנו חיפוש חדש. :DFS Visit(u) פרוצ' רקורסיבית המבצעת חיפוש בניסיון להגיע לכל מה שנגיש מצומת ההתחלה הנוכחי שעדיין לא ביקרנו בו. סיבוכיות:. שדות: צבע: לבן טרם נתקלנו בצומת; אפור נתקלנו אך טרם סיימנו (לא ביקרנו בכל צאצאיו); שחור סיימנו את הביקור בצומת. :time מונה המתאר את סדרת האירועים שהאלג' נתקל בהם. בכל פעימה: נתקלים בצומת חדש / מסיימים טיפול בצומת..(discovery) לראשונה הזמן בו ניתקלנו ב- u :. תמיד יתקיים:.(finish) הזמן בו סיימנו את הטיפול ב- u : u. הצומת הקודם שגילה את : האלג' משתמש ברשימת צמתים ללא הנחות על סדר כלשהו, לכן שינוי סדר הצמתים ברשימה יביא לפלט שונה. מצביעי יוצרים אוסף של עצים מכוונים לכיוון השורש, המכונה יער ה- DFS. מצביעי ההפוכים הם כיווני הקשתות המקוריים בגרף. תכונות: (1) עקרון הקינון: לכל צומת u מתאים אינטרוול זמן בו הוא פעיל:., לכל שני צמתים u,v מתקיים: או שהאינטרוולים שלהם זרים, או שאחד מוכל בשני (לא תתכן חפיפה חלקית). אם הם מקוננים, אזי הצומת v עם האינטרוול המוכל יהיה צאצא של u, לו האינטרוול המכיל, ביער ה- DFS. כיוון שהאלג' פועל ברקורסיה, ההוכחה ניתנת לפישוט ע"י תיאור החזקת הצמתים במחסנית. (2) סווג קשתות הגרף ע"י :DFS האלג' עובר על כל קשתות הגרף, ובחלקן משתמש לבניית עץ ה- DFS (הגדרת ). קשתות אלו יסומנו כקשתות עץ. סיווג שאר הקשתות: קשת קדמית: מחברת אב קדמון לצאצא. קשת אחורית: מחברת צאצא לאב קדמון (או לאב עצמו, אך לא קשת עץ). קשת חוצה: מחברת שני צמתים שאינם צאצא/אב קדמון. סיווג הקשתות בגרף מכוון: מסתכלים על, ברגע בו u בודק אותה: אם v לבן, זו קשת עץ: כיוון שזהו רגע ביצוע הקריאה הרקורסיבית. אם v אפור, זו קשת אחורית: הצבעה לצומת במסלול הנוכחי הנבדק, כלומר לצומת שהוא אב קדמון של v.

א( א( 4 סטולרמן אריאל הם: נמצאים בזמן ונתוןש-. לכן המקרים אם v שחור, זו קשת קדמית או חוצה: אנו חוצה (מצומת "מאוחר" u לצומת "מוקדם" v). אינטרוולים זרים): u,v אינם צאצא/אב-קדמון, לכן זו קשת o אינטרווים מקוננים): u אב קדמון של v, לכן זו קשת קדמית. o לא מכוון: הקשתות בגרף סווג לראשונה ב- u : ביחס לזמן בו הקשת מתגלית לראשונה. נניח, מתגלית זה יש רק קשתות עץ או קשתות אחוריות, במקרה זו קשת עץ. אם v לבן, היה אם v אינו לבן, זו קשת אאחורית: v התגלה כבר קודם, ו- v. צריך להיות במחסנית לפני u, כלומר אפור, אחרת אם זו קשת אחורית ). ולכן v אב קדמון של u (לכן את כל שכניו, בין היתר את. u לפיכך v חייב להיות במחסנית כבר היינו מגלים שחור אזי (3) עקרון המסלול הלבן: הראשון המתגלה במסלול ה- DFS הוא, אזי כל שאר הצמתים, ונניח שהקודקוד נניח ששב- G (מכוון או לא) קיים מסלול בעץ ה- DFS. מניחים כי צצאצא של וההוכחה באינדוקציה: יהיו צאצאים של. צאצא של מעקרון הקינון נובע ש-. שימושים: מכוון G: (1) מציאת רכיבי קשירות בגרף לא מתגלה אחרי ברגע זה או קודם ומסתיים לפניו. בין לבין, בודק את כל שכניו כולל את. לכן מתגלה. לפיכך מתקיים: הצומת הראשון ב- קשירות C הוא עץ: אם הוא רכיב קשירות ברור. כל רכיב הוא רכיב קשירות. כל עץ הוא מריצים,DFS וכל עץ ביער ה- DFS מקשר מ- לכל שאר צמתי C כי C הוא רכיב המסלול הלבן כל צמתי C הם צאצאים של (קיים מסלול C שה- DFS מגלה, אזי לפי עקרון קשירות). לאותו רכיב קשירות: (2) בדיקת שייכות שני צמתים u,v מהצמתים ע" "י מצביעי ונשווה שורשים. אחרי הרצת,DFS נגיע לשורש עץ ה- DFS של כל אחד (3) האם G (מכוון או ללא) מכיל מעגל : מעגל ב- G קיימת קשת אחורית. קיים (4) מיון טופולוגי של גרף מכוון אציקלי :(DAG) מיון טופולוגי אינו יחיד, התנאי היחיד הוא. מתקיים קשת, ) ) כך שלכל,, צמתי סידור G בסדר מלא f בסדר הפוך ) (צומת בעל הערך הגבוה ביותר יהיה ראשון במיון). שהקשתות יהיו מכוונות קדימה. מציאת מיון טופולוגי: הרצת,DFS ולקיחת ערכי. כיוון שאין מעגל אז אין לכל סוג קשת, ש- מיון טופולוגי (הוכחה לפי סוג הקשת: מראים מכוון אין מעגל קיים לו בגרף G אחוריות). קשתות (5) מציאת גשרים, קודקודים מנותקים ורכיבי דו-קשירות: אותו ללא קשיר). גשר: קשת שאינה נמצאת על מעגל, ומחיקתה תנתק את הגרף (תהפוך הקשתות היוצאות ממנו תנתק את הגרף. קודקוד מנתק: צומת שניתוקו יחד עם ניתוק כל מנתקים. ללא קודקודים תהפוך אותו ללא קשיר (למשל מעגל). או: גרף קשיר שניתוק קשת כלשהי לא גרף דו-קשיר: גרף קשיר (6) מציאת רכיבי קשירות חזקה בגרף מכוון: צומת ניתן להגיע לכל צומת אחר במסלול מכוון. אם לא, ניתן גרף מכוון הוא קשיר חזק אם מכל המושרה מכל רכיב הוא קשיר חזק. רכיבים לרכיבים זרים א ךמקסימלים, שהגרף לפרק את V אותו גרף רק שכל צומת הוא גרף הרקח" םי לכל גרף מכוון ניתן להסתכל על אלו הם רק"חים. אזי אותם רקח" "ים המשתתפים היה בו מעגל, רק"ח בגרף המקורי. גרף הרק"חים ייהיה :DAG אם קודם. היו באותו רק" "ח שהיה מתגלה במעגל האם הוא קשיר חזקה. דוגמא: נתון G מכוון, רוצים לבדוק פתרון : נקבע שרירותית צומת s כלשהו ונבדוק: הרצת DFS מ- s ובדיקה שקיבלנו עץ אחד ביער ה- DFS. אם לא קיבלנו עץ אחד בלבד, נשתמש להגיע מ- s לכל צומת אחר: האם ניתן מסלול לבן ולכן u צאצא של.ss u אינו בעץ (כלומר עדיין לבן) אך קיים מסלול מ- s אליו, זהו בעקרון המסלול הלבן: אם את הגרף ההפוך,,,, נריץ עליו DFS ונבדוק שמתקבל עץ אחד. אחר ל- s : נבנה להגיע מכל צומת האם ניתן אם הראנו את שני הנ "ל, אזי יש מסלול מכל לכל - פשוט עוברים דרך s.

5 חישוב רק"חים בגרף מכוון G: מריצים DFS על G ומסדרים את הצמתים לפי סדר f יורד, נסמן רשימה זו L. בונים את הגרף ההפוך. מריצים DFS על כאשר הפרוצדורה הראשית משתמשת ב- L בתור רשימת הצמתים. כל עץ ב- DFS השני הוא רק"ח (אם נהפוך את כיוון הקשתות שוב לכיוון המקורי שב- G ). טענות ותרגילים (מהתרגול, קשור לנקודה (5) לעיל): קשת (בגרף לא מכוון) אינה גשר היא נמצאת על מעגל פשוט בגרף. אם, אינה גשר, אזי לאחר הסרתה נשאר מסלול בין u ל- v, לכן היא נמצאת על מעגל פשוט (מסלול פשוט בין u ל- v בנוסף לקשת.(, גרף לא מכוון וקשיר ניתן לכיוון לגרף קשיר בחוזקה אין בו גשרים. : נסתכל על קשת, לאחר שכיוונו אותה. כיוון שהגרף המכוון החדש קשיר בחוזקה, יש מסלול גם מ- v אל u, ולכן, נמצאת על מעגל בגרף המכוון. הטענה הקודמת נובע שאינה גשר, וזה תקף לכל קשת בגרף. לכן בגרף אין גשרים. : מריצים DFS על הגרף, וכיוון שאינו מכוון מקבלים קשתות עץ וקשתות אחוריות בלבד. נכוון קשתות עץ מהורה לבן וקשתות אחוריות מצאצא לאב קדמון. נסמן את שורש העץ ב- s, ונראה שמ- s ניתן להגיע לכל צומת, ומכל צומת ל- s (וכך: מכל צומת ניתן להגיע לכל צומת). מסלול מ- s לצומת: על קשתות העץ. מסלול מצומת ל- s : מניחים באינדוקציה על צומת u ומוכיחים על צומת v הנמצאת עמוק יותר בעץ. לפי הנחה, אין גשרים ולכן כל קשת יושבת על מעגל. לפיכך קיימת קשת אחורית מ- v או צאצא שלו אל u או אב קדמון שלו ולכן מ- v ניתן להגיע לצומת שלפי הנחת האינדוקציה מתחבר ל- s. נתונה. רוצים לבדוק האם קיים מסלול (לא בהכרח פשוט) העובר בכל הצמתים ב- S. מוצאים את גרף הרק"חים של G ומיון טופולוגי לגרף זה. בתוך כל רק"ח קיים מסלול בין כל הצמתים מ- S הנמצאים בו. לפי סדר המיון הטופולוגי של הרק"חים, מוצאים ע"י DFS / BFS מסלול בין כל ל- (רכיבי הקשירות). נתון גרף מכוון G, רוצים למצוא קבוצה מינימלית S כך שלכל קיים כך שקיים מסלול מ- s אל v. מוצאים גרף רק"חים ל- G. לכל C (רכיב קשירות ב- G וצומת בגרף הרק"חים) שהוא מקור (אין קשתות שנכנסות אליו), בוחרים ומכניסים אותו ל- S. מבצעים מיון טופולוגי על הרק"חים ומוכיחים באינדוקציה על. אלגוריתם למציאת קודקודים מנתקים: אלגוריתם: נגדיר לכל צומת שדה שהוא: כמה גבוה בעץ ה- DFS ניתן להגיע מצומת u או צאצא שלו ע"י קשת אחורית (המרחק המינימלי מהשורש אליו ניתן להגיע). נריץ,DFS ולכל קודקוד שסיימנו לחשב את ערך ה- f שלו (סיים טיפול), נגדיר: בן ישיר של קשת,min אחורית. min,mindv, מתקיים: u (לא שורש) מנתק קיים w בן של. כך ש- u הוכחה: אם קיים w כזה, אזי לא ניתן להגיע ממנו להורה של u, לכן u מנתק. אם u מנתק, אז קיים w כנ"ל, אחרת מכל בן (או צאצא) של u ניתן להגיע לאב כלשהו של u, כלומר הסרת u לא ניתקה את הגרף, בסתירה. טענה: u מנתק יש לו לפחות שני בנים. טענה: לכל 2 רכיבי דו-קשירות יש לכל היותר קודקוד אחד משותף. הוכחה: נניח בשלילה שלשני רכיבי דו-קשירות, יש שני קודקודים משותפים.u,v נסתכל על. אף צומת שנמצא רק באחד מהם אינו קודקוד מנתק כיוון ש-, רכיבי דו-קשירות (מהגדרה). אם כן, אם ננתק את, u, לא יתנתקו מחוברים ע"י v. באופן דומה בניתוק v. לפיכך היה צריך להיות רכיב דו-קשירות אחד מלכתחילה כיוון שהוא תת גרף קשיר ללא קודקודים מנתקים. מסקנה: רכיבי דו קשירות מהווים חלוקה של קשתות הגרף. הוכחה: כל קשת בפני עצמה היא תת-גרף דו-קשיר ולכן שייכת לרכיב דו-קשירות. מהטענה לעיל נובע שאין קשת משותפת (=2 צמתים משותפים) לשני רכיבי דו-קשירות שונים.

6 :MST: Minimum Spanning Trees עצים פורשים מינימליים (עפ"מ): הקלט תמיד יהיה גרף לא מכוון וקשיר עם פונקציית משקלות על הקשתות :. עץ פורש: תת גרף של G שמכיל את כל צמתי הגרף והוא עץ (מורכבמ- 1 קשתות מ- E ). תמיד קיים כזה כי G קשיר. משקל עץ פורש: סכום משקלות קשתות העץ שהוא. נרצה למצוא עץ פורש מינימלי: עץ פורש בעל סכום משקלות מינימלי. עץ זה אינו יחיד בהכרח (למשל גרף בעל ערך w קבוע לכל קשת). אם יש משקלות שליליים, ניתן להוסיף להם 0 כלשהו וכך משקל כל עץ פורש יגדל בדיוקב- 1, ונקבל שעפ"מ עכשיו עפ"מ קודם. גישה חמדנית :(Greedy) נוסיף לעץ (מאותחל לריק) קשתות מ- G ונקפיד שלא יווצר מעגל. אם נצליח לבצע זאת 1 פעמים נקבל עץ פורש. בדרך נבחר את הקשתות הקטנות ביותר שנוכל (בכל צעד תבחר הקשת המינימלית האפשרית). גישה כללית: קבוצה מבטיחה: תת קבוצה כך שקיים עפ"מ המכיל את A A. לא חייבת להיות קשירה, אך ברור שאין בה מעגל. קב' מבטיחה. האלגוריתם: קשת בטוחה: אם A קב' מבטיחה ו-, אזי e קשת מבטיחה אם עדיין קב' מבטיחה. מאתחלים את A להיות הקבוצה הריקה. רצים בלולאה: כל עוד A אינו עץ פורש (1 ), הוסף קשת בטוחה e ל- A. נכונות: קבוצה ריקה תמיד מבטיחה, לכן האתחול נכון. תמיד קיימת קשת בטוחה e ל- A קב' מבטיחה, כיוון ש-, וכל, היא בטוחה מהגדרה. לבסוף: אם A עץ פורש מוכל בעפ"מ, אזי A הוא עפ"מ בעצמו. כל רכיב קשירות בגרף, הוא עץ שיכול להיות גם ללא קשתות. באתחול גרף זה יהיה בעל רכיבי קשירות. אם e קשת בטוחה ל- A, אז הוספתה ל- A תחבר בין שני עצים (זרים בצמתים כי אין מעגלים) ותקטין את מספר רכיבי הקשירות באחד. לאחר 1 צעדים נקבל רכיב קשירות אחד, שהוא העץ הפורש. חתך: פירוק של V לשתי קבוצות לא ריקות זרות כך ש-. קשת חוצה: חתך היא קשת המחברת צומת ב- לצומת ב-. חתך מכבד: את A (קב' מבטיחה) אם אין ב- A קשת חוצה (כל רכיב קשירות ב- A מוכל או ב- או ב- ). קשת חוצה קלה: בהינתן חתך, קשת תהיה חוצה קלה אם יש לה משקל מינימלי מבין כל הקשתות החוצות. טענה: תהא A קבוצה מבטיחה, יהא, חתך המכבד את A, ותהא, קשת חוצה קלה של החתך. אזי e קשת בטוחה עבור A. הוכחה: ידוע ש- T, עפ"מ. אם, סיימנו. אם : כיוון ש- T קשיר, קיימות קשתות ב- T החוצות את החתך (אחרת T לא קשיר). אם כן קיים מסלול כלשהו בין u ל- v, ב- T, עם קשת חוצה 'e. נחליף את 'e ב- e ונסמן את העץ החדש 'T. כיוון ש- e חוצה קלה: 'T. עץ: יש בו 1 קשתות; כמו כן מקיים:. כיוון ש- T מסקנה: יהי C רכיב קשירות של A, אזי החתך, \ מכבד את A, וקשת חוצה קלה בחתך זה בטוחה ל- A. עפ"מ אזי גם 'T עפ"מ, ולכן בטוחה. אלגוריתם Kruskal למציאת :MST אלגוריתם זה משתמש במבנה נתונים.Union set באיתחול כל צומת הוא set בפני עצמו, ורצים על הקשתות לפי משקל לא יורד. בכל שלב: אם הקשת מחברת בין שני רכיבי קשירות (sets) שונים, נוסיפה ל- A ונאחד את שני ה- sets שחיברה ל- set אחד. אם לא מחברת בין שניים שונים, נדלג עליה (מדלגים על קשתות שסוגרות מעגל). נכונות האלג': משקל מינימלי של e בחיבור שני רכיבי קשירות שונים: אם היתה 'e קלה יותר, אז בדקנו אותה קודם (בודקים לפי סדר משקלות לא יורד), ולפיכך נפסלה ולכן סגרה מעגל. אם כן גם בתמונה הנוכחית תסגור מעגל, ולא ניתן לבחור אותה. e בטוחה ל- A : נניח שמחברת ל- (שני רכיבים קשירות שונים). נסתכל על החתך e :,\ חוצה חתך זה, ולפי סדר הבדיקה היא הקלה מבין כל הקשתות החוצות חתך זה מכאן שהיא חוצה קלה. לכן לפי הטענה לעיל היא בטוחה ל- A. סיבוכיות: למימוש יעילlog.

7 אלגוריתם Prim למציאת :MST מתחזקים רכיב קשירות אחד C (מאותחל ל- ). בכל שלב מוצאים את הקשת הקלה ביותר המחברת צומת ב- C לצומת במשלים של C אותו צומת במשלים עובר לתוך C. האלג' לא פועל על קשתות אלא על צמתים: כל צומת במשלים (\) מחזיק key של משקל הקשת המינימלי בינו לבין מישהו ב- C. מחזיקים את כל הצמתים (המשלים של C) בתור עדיפויות. בכל שלב מוצאים את הצומת עם ה- key המינימלי (extract min) ומוסיפים אותו ל- C, מעדכנים את ה- keys של שכניו (הנמצאים במשלים) ע"י.decrease key נכונות: מיידית מהטענה: אם נסתכל על החתך, \ (כאשר \ הוא תור העדיפויות), אזי כל צומת שמוציאים מ- \ מחובר בקשת חוצה קלה ל- C, לכן זו קשת בטוחה. סיבוכיות: log להוצאות מהתור, log הפחתות מפתח בערימה בינארית או בערימת פיבונצ'י. סה"כ: log בערימה בינארית או log בערימת פיבונצ'י חיסכון לעומת Kruskal ל- E גדול. תכונות עפ"מים (נובעים מאלג' :(Kruskal פלט האלג' של קרוסקל תלוי בסדר מיון הקשתות. אם לכל הקשתות משקלים שונים, האלג' מייצר עץ יחיד. טענה: האלג' של קרוסקל מסוגל לייצר כל עפ"מ אפשרי (מכאן: אם המשקלים שונים, יש עפ"מ יחיד) טענה: תהי : עולה ממש, ו- G עם פונ' משקלות w על הקשתות. נגדיר ומתקיים: T עפ"מ לפי T w עפ"מ לפי. הוכחה: עבור Tעפ"מ מסוים, נסדר את הקשתות ב- G לפי סדר w עולה כך שקרוסקל יבנה את T. אותו סדר בדיוק יהיה עבור. טענה: עפ"מים שונים נבדלים בקשתות שלהם אך לא במשקל קשתותיהם: יהיו, שני עפ"מים שונים. אזי אם נסדר את משקל קשתותיהם לפי סדר עולה:,. לפי המשקלות 1,.1 1: אזי:,, ו-,, הוכחה: נניח בשלילה שלא מתקיים, וקיים אינדקס j כך שבה"כ:. נגדיר פונ' עולה ממש: החדשים מתקיים: - 1 1 ה-" 1 +" יהיה אם המשקלים הללו שונים מ- ; ועבור :y. 1 1 כלומר: המשקל הכולל של העץ הראשון ישתנה לכל היותרב- 1, והשני ישתנה בדיוק ב-, לכן בכל מקרה משקלם יהיה שונה בסתירה לשמירת עפ"מ תחת f עולה ממש. טענות ותרגילים (מהתרגול): פתרון: נתון גרף מכוון וקשיר עם פונ' משקלות על הקשתות. כל קשת צבועה באדום או כחול. למצוא עפ"מ עם מספר מקסימלי של קשתות אדומות. נשנה את אחד האלג' למציאת עפ"מ באופן הבא: השוואת קשתות ע"י תוגדר: w קלה מ- או אם:, אדומה ו- כחולה. א. ב. או הוכחה: נגדיר פונ' משקלות חדשה 'w: אם e כחולה אז ואם e אדומה אז כך ש- קטן מספיק כדי שההשוואה בין הקשתות תהיה שקולה להגדרה בפתרון. כמו כן נניח קטן מספיק כך שלכל שני עצים פורשים:. העץ T שהפתרון מחזיר מביא למינימום את, בגלל שקילות הפתרון להגדרת 'w. כעת נותר להראות: T הוא עפ"מ לפי w: אם קיים לכל עפ"מ אחר.w' לפי עפ"מ בסתירה לכך ש- T אזי כךש- יש מספר קטן או שווה של קשתות אדומות: w לפי מסלולים קצרים (קלים) ביותר מק"בים: נתון גרף G מכוון או לא, ופונ' משקלות על הקשתות : (יכול להיות שלילי). משקל מסלול = סכום המשקלות שעל קשתות המסלול. לזוג צמתים u,v נגדיר =, המשקל המינימלי של מסלול המחבר את u ל- v (אם קיים; אחרת). בעיות single source או :shortest paths עבור צומת התחלה s נרצה לחשב את כל הגדלים, לכל (להבדיל מבעיית S.P..(All pairs הנחה: אין מעגלים שליליים (סכום משקל הקשתות במעגל שלילי) נגישים מ- s. אם היו, אזי כל הצמתים u שיש מסלול אליהם מ- s העובר במעגל היו מקיימים., מעגלים במשקל 0 הם תקינים, פשוט ניתן להחליט לעבור בהם מספר כלשהו של פעמים. אם אכן אין מעגלים שליליים אזי: תמיד קיים מק"ב פשוט (לא עובר באותו צומת פעמיים) מ- s לכל u הנגיש אליו.

8 תכונות מק"בים: תת-מסלול של מק"ב הוא מק"ב. אשמ"ש: אם, אזי,.,, אם u צומת אחד לפני v על מק"ב מ- לs.,, אז מתקיים השוויון:, v- אם 1 אזי משקל המסלול שווה למספר הקשתות על המסלול, והבעיה נפתרת ע"י.BFS באופן דומה ל- BFS, יוחזקו השדות הבאים לכל צומת: אלגוריתם כללי: : משקל המק"ב מ- לs -u שהתגלה עד כה. מאותחל ל- ) מאותחל ל- 0 ). מצביע לצומת הקודם על המק"ב שהתגלה עד כה. מאותחל ל- null. : פרוצדורת העדכון :Relax הפעלת relax על, בודקת אם,. אם כן, נעדכן את ואת. לאחר איתחול עוברים על הקשתות בסדר כלשהו כל עוד יש relax משפר. כשאין relax משפר עוצרים. אלג' זה לא יעצור אם יש מעגל שלילי נגיש מ-. אם אין מעגלים שליליים, האלג' תמיד יעצור ובסופו יתקיים לכל,:u s. לכל u: יורד מונוטונית במהלך האלג'; תמיד מתקיים,. עץ המק"בים: טענה: בכל רגע שהוא, מצביעי ה- שאינם null (אך כולל s) יוצרים עץ מכוון כלפי השורש, והשורש הוא s. הוכחה: הגרף המורכב ממצביעי הוא קשיר וחסר מעגלים, ולכל u שאינו מצביע ל- null מסלול יחיד לכיוון s כיוון ששדה יחיד. אם המסלול מסתיים ב- כך ש- אזי. נניח שלא, אז נסתכל על ה- relax שנעשה על, שהביא ל-., : מכאןש- (כי ה- relax נעשה). אם אכן, אז הפעם הראשונה ש-. לכן. לעולם, בסתירה לכך ש- null ולא יקבל null מקבל ערך שאינו ואז מקבל ערך סופי הוא ב- relax, אין מעגל: נניח שיש מעגל, באמצעות חיבור אי-שוויונים נקבל שהמעגל הוא שלילי. בעץ המק"בים מתקיים: כל צומת בעץ הוא צומת שנגיש מ- s בגרף המקורי: נניח u נגיש מ- s, אזי -, קיבל ערך שונה מ- null ולכן u בעץ. המסלול (ההפוך) מכל צומת לשורש s הוא מק"ב בגרף המקורי: מניחים באינדוקציה על עומק השורש k. מתקיים: אורך מסלול מסוים מ- s ל-, חישוב מק"בים ב- DAG :,, ולכן אותו מסלול מסוים הוא מק"ב. מבצעים מיון טופולוגי על G, וניתן להתעלם מכל הצמתים הקודמים ל- s במיון. נבצע איתחול, נעבור על כל צומת לפי סדר המיון הטופולוגי ונבצע relax על כל הקשתות היוצאות ממנו. נכונות: כאשר הלולאה המרכזית מגיעה לצומת u, מתקיים,. אינדוקציה על סדר המיון הטופולוגי: נניח נכונות עד v כאשר הוא מק"ב, וכל הקודמים ל- u נמצאים לפניו במיון. לפי הנחה:, כשמגיעים ל- v, ואז מבצעים relax על הקשתות כולל, ומתקיים לאחר מכן:,.,, אגף ימין הוא תת-מסלול של מק"ב + אורך הקשת. אזי:, כיוון שתמיד גם,., לכן סה"כ שווה ל-,, אלגוריתם של :Ford הקלט הוא גרף כללי, משקלות שליליים אפשריים (לא מעגלים שליליים). אתחול כרגיל. הלולאה: כל עוד קיימת קשת עם relax משפר, נבצע אותו. בסיום מתקיים, לכל u. זמן הריצה יכול להיות נוראי: יתכן סדר relax שיגרום ל- 2 צעדים. אלגוריתם :Bellman Ford אם אין מעגלים שליליים אזי תמיד קיים מק"ב פשוט, כלומר לכל היותר בעל 1 קשתות. האלג' עושה 1 איטרציות, כאשר בכל אחת הוא מבצע relax על כל הקשתות. סיבוכיות:. הוכחה באינדוקציה על k מספר האיטרציה (של הלולאה הרצה עד 1 ). אם עדיין קיים relax משפר, החלק השני של האלגוריתם מגלה זאת ומחזיר = false קיימים מעגלים שליליים בגרף. הוכחה: אם אין מעגל שלילי, ראינו שמתקיים בסוף לכל,:u. אם יש מעגל שלילי, נטען שיש relax משפר: אחרי 1 האיטרציות כל ערכי ה- d קטנים מ-. אם נניח שאכן אין relax משפר נקבל אי-שוויונים מהצורה: ), צמתים במעגל). אם נחבר את כולם יחד ונקבל:, 0 מעגל אי-שלילי, בסתירה.

9 אלגוריתם של :Dijkstra הנחה: משקלות אי-שליליים. שימוש בתור עדיפויות Q המאותחל ל- V, וקבוצה S המאותחלת ל- שתחזיק את כל הצמתים שכבר הוצאנו מ- Q וחישבנו את ערך ה- שלהם. התור מנוהל לפי ערכי ה- d. לכל extract min שמבוצע על Q, מבצעים relax על כל שכניו (הנמצאים ב- Q עדיין. relax על אלו שלא ב- Q אינו רלוונטי). אם ה- relax משפר, זה גורר decrease key על אותו שכן הנמצא ב- Q. ההבדל מ- Bellman Ford : כאן כאשר צומת כלשהו מוצא מהתור, בטוח לא ישופר עוד ערך ה- d שלו. B F מחכה כל הזמן לשיפורים נוספים. סיבוכיות: על כל צומת וכל קשת עוברים פעם אחת: + פעולות על Q: פעולות + extract min פעולות.decrease key סה"כ: ערימה בינומית:, log ערימת פיבונצ'י:. log נכונות: כאשר מוציאים v מהתור מתקיים,, הוכחה באינדוקציה על סדר ההוצאה מהתור: s ברור. נניח הבא לצאת הוא v. נסתכל על המק"ב מ- s ל- v, שחלקו צמתים ב- S וחלקו ב- Q. נסמן את האחרון שב- S (כשיוצאים מ- s ) ב- x, והראשון שלא ב- S ב- u. כאשר x יצא מ- Q מתבצע כיוון ש- v. ולכן,,,, ומתקיים אי השוויון הרגיל:,, על relax יוצא כעת מהתור, ו- u טרם יצא, יתקיים:. כעת מתקיים:,, ולכן,., כמו כן מתקיים:,,, ולכן,., מכאן שאי השוויון הראשון הוא בעצם שוויון, ובפרט:,. תרגילים: למצוא מק"ביםמ-.: 0,1,2 גרף מכוון עם G פתרון: משתמשים בעובדה שסיבוכיות זמן ריצה של Dijkstra היא. _ _ נממש תור עדיפויות בצורה יעילה יותר באופן הבא: כל המק"בים פשוטים (אין משקלות שליליים) ולכן משקל מסלול הוא לכל היותר 1.2 נחליף את ב- 1 2 1 ונחזיק מערך באורך זה, שיחזיק רשימות מקושרות דו כיווניות: בכל אינדקס i במערך יהיו כל הצמתים שערך ה- d שלהם הוא i. לצמתים גם יהיה מצביע למקום ברשימה המצביע אליהם חזרה. ואז מתקיים:.1 מחיקת מצביע מהרשימה בה נמצא במערך והשמת מצביע לצומת בראש הרשימה באינדקס החדש :decrease key extract מציאת האיבר הראשון במערך שלא מכיל רשימה ריקה. נחזיק משתנה עזר להיכן הגענו, כי כל קריאה באה ל- :extract min min תחזיר ערך גדול או שווה לקודמו. סה"כ נעבור על כל הצמתים פעם אחת לכל הקריאות = 1 לקריאה. סה"כ:. נתון G מכוון,,, :, כל קשת צבועה אדום / כחול. למצוא מק"ב מ- s ל- t בעל מספר זוגי של קשתות אדומות. פתרון: ניצור גרף חדש 'G באופן הבא: לכל צומת v ב- V יהיו שני צמתים, ב-' V ; לכל קשת, יהיו הקשתות:,,, אם, כחולה.,,, אם, אדומה. נריץ Dijkstra מ- ונחזיר את המק"ב מ- ל-. נכונות: מההגדרות נובע שקיים מסלול מ- ל- אמ"מ קיים מסלול מ- s ל- t באותו אורך ובעל מספר זוגי של קשתות אדומות, בפרט מק"ב. מק"בים בין כל זוגות הצמתים Paths :All Pairs Shortest פתרונות נאיביים: אם יש משקלות שליליים (לא מעגלים שליליים), נריץ BF פעמים, כל פעם עם צומת אחר כצומת התחלה. זמן ריצה: ויכול להגיע עד. אם אין משקלות שליליים נבצע Dijkstra פעמים וזמן הריצה יהיה log שזה לכל היותר. נשתמש ביצוג מטריציאלי של הגרף, כאשר לצמתים מספרים סידוריים 1 עד n. 0,,, (מטריצת משקלות).,,,, מטריצה :W

10 מטריצה D: מטריצה שתחזיק את אורכי המסלולים הקצרים ביותר שהתגלו עד כה בין כל i לכל j. אתחול אפשרי: לקחת את W., מטריצה : מטריצת המצביעים במסלול הטוב ביותר שהתגלה עד כה. איתחול:.,,,,, אלגוריתם ראשון (כמו :(B F נסמן את מטריצת התשובה (מטריצת המק"בים) ב-' D, ונגדיר:., :, נגדיר פעולת "כפל" מטריצות: min,,min,,.( " " נשתמש ב-"+" (למשל: ובמקום כאשר במקום "+" נשתמש ב-" min ",, min,, הוכחנו שמספיק לבצע 1 איטרציות ב- B F, ולכן מטריצת המק"בים תהיה. סיבוכיות: קל להוכיח ש"כפל" המטריצות שהוגדר לעיל אסוציטיבי ולכן ניתן להשתמש ב- log הכפלות במקום ב- n הכפלות. נקבל:. log הערה: האתחול נחשב לאיטרציה ראשונה, לכן נבצע "כפל" רק 2 פעמים בפועל. הערות:.1 מציאת מעגלים שליליים: כמו,B F לאחר סיום כל ההכפלות, נבצע הכפלה נוספת ונבדוק האם היא משפרת שלילי. אופציה נוספת: אחרי סיום (כלה- 1 איטרציות) נבדוק אם יש ערך שלילי על האלכסון.,.2.3.4 עדכון מטריצת : אם איזשהו relax שיפר, ניקח את אותו ערך k אליו שיפרנו ונבצע., עדכון בגרסה המהירה: עבור ה- k מה- relax המשפר נבצע את ההשמה:.,, כלשהו. אם כן אז יש מעגל מקום: אין צורך בעותקים של D. באופן נאיבי מספיק להחזיק שניים: כל תוצאה חדשה נשים בעותק האחר. ניתן גם עם עותק אחד. תרגילים: נתונים n סוגי מטבעות,, ומטריצת המרה בה: כמה מטבעות מסוג j נקבל עבור מטבעות מסוג. i רוצים לבדוק האם קיים.,,, מסלול המרה שיביא לרווח, כלומר אינדקסים כךש: 1 נבנה גרף מכוון שלם שקודקודיו הם כל. log, log, פתרון: מוציאים log משני האגפים ומקבלים 0 ולכל קשת, ניתן את המשקל. log כעת הבעיה שקולה למציאת מעגל שלילי בגרף, וזאת ניתן ע"י.B F כיוון שהמעגל שלם, אז כל צומת נגיש מכל צומת ולכן ניתן לבצע B F מכל צומת שהוא. זמן ריצה:. נתונה מערכת אי-שוויונים על המשתנים,, מהצורה:. רוצים למצוא פתרון למערכת או להוכיח שלא קיים כזה. פתרון: נבנה גרף שלם לא מכוון שצמתיו הם כל ומשקל כל קשת, הוא הגרף. נטען כי קיים פתרון למערכת אמ"מ אין מעגל שלילי בגרף שיצרנו:. נוסיף לגרף צומת חדש s עם קשתות במשקל 0 לכל צמתי אם נניח שיש מעגל שלילי, אזי סיכום אי השוויונות המתאימים יביאו לסתירה. אם נניח שאין מעגל שלילי, אז B F מחזיר לכל את., נראה שהצבת ערכים אלו הם פתרון למערכת: לכל, צריך להתקיים וזה אמ"מ,,, ומכאן מתקבל אי שוויון בסיסי לגבי מק"בים. נתון גרף מכוון ללא מעגלים שליליים ופונ' משקלות. לכל v נגדיר:. min, למצוא את. פתרון: נוסיף צומת חדש s עם קשתות במשקל 0 לכל צמתי הגרף. נריץ B F ונחזיר לכל את., נכונות: מתקיים ש-., min,, min, נתון גרף מכוון עם פונ' משקלות וללא מעגלים שליליים. רוצים להחזיר True אמ"מ קיים מעגל במשקל 0 בגרף. פתרון: נוסיף לגרף צומת חדש s עם קשתות במשקל 0 לכל צמתי הגרף. נריץ B F מ- s ונבנה מתוצאותיו את גרף המק"בים 'G (בו קשת מופיעה רק אם היא חלק ממק"ב ב- G ). בעזרת DFS נבדוק אם יש קשת אחורית = יש מעגל מכוון. אם כן, נחזיר T אחרת F. נכונות: אם יש מעגל באורך k ב-' G אז סיכום השוויונות,,, (כאשר ( יביא ל:, המעגל 0 ב,G כלומר קיים ב- G מעגל במשקל 0. אם קיים ב- G מעגל במשקל 0 אז אם נניח בשלילה שאינו ב-' G אז קיימת קשת מהמעגל, שאינה ב-' G ונקבל אי שוויונות מהצורה,,, פרט לקשת אחת (בה"כ, :(, קטן ממש., מסיכום אי השוויונות נקבל כי 0 המעגל ב,G בסתירה.

לi 11 אלגוריתם של :Floyd Warshall ממספרים באופן שרירותי את הצמתים מ- 1 עד n. עבור מק"ב מצומת i לצומת j, נסתכל על כל הצמתים הפנימיים, ונגדיר את גובה המק"ב k כאינדקס המקסימלי מבין הצמתים הפנימיים באותו מק"ב. בונים מק"בים לפי סדר גובה עולה: לכל,, נחשב את אורך המק"ב מ- i ל- j בגובה החל מ- 0. בסיום נקבל את כל המק"בים.. בגובה ל- j אורך המסלול הקצר ביותר מ- i :, : מסלולים ללא צמתים פנימיים. בניית : מתוך, min,,,, : או שהם שווים או האורך המינימלי של מסלול מ-. ושאר הצמתים k העובר דרך -j סיבוכיות:. הערות:.1.2 מקום: מספיק מקום למט' אחת ועדכון כל ערך חדש נשים במקום הערך הישן. עדכון מטריצת : אם הערך שונה, כלומר קיים מסלול טוב יותר העובר דרך k (הגורם הימני):,,,,.. אם לא (הגורם השמאלי) אז: אלגוריתם של :Johnson רעיון האלגוריתם: הופך את כל המשקלות לאי-שליליים ומריץ את Dijkstra פעמים. הטרנספורמציה הנדרשת:. מק"ב תחת w טענה: מק"ב תחת.,,,: הוכחה: עבור מסלול כלשהו,, מתקיים: - כלומר ההבדל תלוי רק בצומת ההתחלה וצומת הסיום, ולא במסלול. תהיה תוספת קבועה עבור כל מסלול מ- ל- ולכן מק"ב נשמר. כעת נבנה h מתאימה: נעתיק את הגרף לגרף חדש 'G, ונוסיף לו צומת s שיחובר לכל צמתי 'G עם משקל 0 לכל., נבצע B F אחד מ- s, ונגדיר:., אם כל המשקלות הישנים גדולים או שווים ל- 0, אז 0 (כי ברור שהמק"ב מ- s לכל הצמתים יהיה הקשת הישירה שמשקלה 0, ואז ). ההוכחה פשוטה: 0,, אמ"מ:, -,, תכונה בסיסית של מק"ב. זרימה ברשתות: :Network Flow רשת זרימה: גרף מכוון G עם צומת מקור וצומת מטרה ופונקצית קיבול על הקשתות ; 0 ) : לכל.( 0: מניחים כי כל צומת נגיש מ- s ו- t נגיש מכל צומת. בפרט, G קשירו- 1. זרימה - :flow פונקציה המוגדרת לכל זוג צמתים: :. בפועל f מקבלת ערכים שאינם 0 רק על קשתות ואנטי קשתות. זרימה חוקית מקיימת: אילוצי קיבול:,., :, אם, אז 0.,, אנטי סימטריה:,, :, (מכאן: 0.(, ערך: שימור הזרימה: לכל, מתקיים 0, ערך זרימה f המסומן תכונות וסימונים: (ניתן להגיד לכל כי זרימה של זוג שאינו קשת היא 0)., חישוב זרימה חוקית עם ערך מקסימלי המטרה: הינו סה"כ הזרימה הנכנסת ל- t...,,, חוק שימור הזרימה: 0.,, יהיו, אזי, לכל f,, זרימה חוקית, מתקיים:,., אם אז:,,, (ניתן גם להפוך את סדר הגורמים:....(,

12 אלגוריתם :Ford Fulkerson אתחול f ל- 0 לכל., כל עוד קיים מסלול משפר, נגדיל את הזרימה f ע"י הזרמה נוספת לאורך המסלול. הרשת השיורית - Network :Residual נתונה רשת זרימה G עם פונ' קיבול c וצמתים,s,t וכן זרימה חוקית f. נסמן את הרשת השיורית : הצמתים הם V והקשתות הן:, כך ש-,, (נותר פוטנציאל להזרים בהן) או אנטי קשתות, עבורן 0., קיבול שיורי:, -,, כמה עוד אפשר להזרים דרך אותה קשת. כאשר 0 (באתחול) אז. ). עם קיבול שיורי 0 לא יופיעו ב- (קשתות השיורית ברשת ל- t מסלול משפר הוא מסלול מ- s אם p מסלול משפר, נסמן ב- את הקיבול המינימלי של קשת של = p הגבול השיורי של p. נזרים ב- p זרימה נוספת בכמות ונגדיר זרימה חדשה:,,,,,,, טענה: :( סימון מקוצר ל- ) זרימה חוקיתו- מקיימת את אילוץ הקיבול:. מקיימת את שימור הזרימה. כיוון שהאלג' לא מציין כיצד ניתן למצוא את המסלול מ- s ל- t, ניתן למצוא אותו ע"י.BFS מספר הצעדים (עבור קיבולים שלמים / רציונאלים שהפכנו לשלמים ע"י מכנה משותף) חסום מלעיל ע"י ערך הזרימה המקסימלית זאת כיוון שבכל צעד 1. ולכן ערך הזרימה גדל בערך 1 בכל צעד. משפט :Min Cut Max Flow נגדיר חתך כחלוקה של V לשתי קבוצות זרות, כךש-,. הקיבול של החתך הוא, והזרימה דרך החתך היא., טענה: לכל זרימה f ולכל חתך, מתקיים:,. טענה: לכל זרימה f ולכל חתך, מתקיים:,, (אם, כךש-, אז,,, ואם היא אנטי קשת, כלומר, אזי 0,.(,, המשפט: התנאים הבאים שקולים:.1.2.3 הוכחה: f זרימה מקסימלית. הרשת השיורית ל- t. לא מכילה מסלול מ- s קיים חתך, כךש-,. 1: 2 מיידי, כיוון שאם היה מסלול משפר ב- אז היינו יכולים להגדיל את ערך הזרימה. 2: 3 נניח שאין מסלול משפר ב-, נבנה חתך, כך ש- S מכיל את כל הצמתים הנגישים מ- s ב- ו- T את כל השאר ) כי לפי הנחה לא נגיש מ- s ). כדי להראות את (3) נראה שלכל, בחתך מתקיים, ).,), נחלק לשני מקרים:, קשת מקורית בגרף: אם,, אזי 0, ולכן :, כיוון ש- u נגיש מ- s, גם v נגיש, בסתירה., אנטי קשת, כלומר, קשת. מתקיים 0.,, אם לא יתקיים, אז 0, ו- 0, ומכאן, ו- v נגיש מ- s כמו קודם, בסתירה. 3: 1 מיידי, כי לכל זרימה מתקיים,, לכן מקסימלית. יעילות,Ford Fulkerson) גרסת :(Edmonds Korp נרצה לחפש מסלולים משפרים קצרים ביותר מבחינת מס' הקשתות, ע"י BFS על הרשת השיורית. מס' האיטרציות של האלג' הוא מס' המסלולים המשפרים. מספר האיטרציות הוא ולכן סה"כ זמן הריצה BFS) בכל איטרציה) הוא. מספר האיטרציות חסום כך כיוון שבכל שיפור, קשת אחת לפחות על המסלול המשפר נהיית רוויה (אותה קשת שקיבולה השיורי הוא ). אותה קשת לא תהיה ברשת השיורית הבאה, אך יכולה לחזור לרשת השיורית שאחריה. סה"כ יכולה לחזור רשת שכבתית: BFS על מ- s בונה שכבות, מרחקם מ- s. נחזיק רק קשתות מעבר משכבה לשכבה, וזו תהיה הרשת השכבתית. פעמים בערך. לכן סה"כ:. כאשר s נמצא לבדו בשכבה ה- 0, t נמצא לבדו בשכבה האחרונה. שאר הצמתים נמצאים בין לבין לפי

13 אלגוריתם של דיניץ: :Dinic נבנה רשת שכבתית מהרשת השיורית ע"י BFS מ- s. כל עוד t נגיש מ- s, נחפש מסלולים משפרים על הרשת השכבתית (כוללת רק קשתות משכבה לשכבה). כאשר t לא יהיה נגיש יותר מ- s, נזרוק את הרשת ונבנה רשת שיורית חדשה (וממנה שכבתית וכן הלאה, עד שאין מסלולים משפרים). בכל שלב מציאת מסלול משפר, נזרים דרכו את הקיבול השיורי המינימלי ונמחק מהרשת השכבתית את הקשתות הרוויות (ונפחית קיבול מהקשתות האחרות במסלול ונתעלם מקשתות הפוכות לקשתות ברשת השכבתית, ששימוש בהן יוביל למסלול ארוך ממש מ- k ). נריץ אלגוריתם דומה ל- DFS על הרשת השכבתית החדשה מ- s עם שלוש הפרוצדורות: אם.(Advance(v)) אז נמשיך ברקורסיה, יש קשת כזו אם ל-( Retreat(u. לך אם אין קשת יוצאת מ- u, :Advance(u) נבצע.Augment u סוף הטיפול ברשת השכבתית הנוכחית (סוף פאזה). אחרת נמחק את זהו אם :Retreat(u) לאב v שקרא ל- u ונבצע.Advance(v) ואת הקשתות הנכנסות אליו, נחזור :Augment זהו מסלול משפר, ולכן נמחק קשתות רוויות, נקטין קיבול שאר הקשתות במסלול ונחזור לצומת ההתחלה u של הקשת הרוויה הקרובה ביותר ל- s במסלול, ונבצע.Advance(u) האלג' מוצא מסלולים משפרים ברשת השכבתית שהם מסלולים משפרים ברשת השיורית באורך k. לכן: אין מסלול ברשת השכבתית אמ"מ אין מסלול ברשת השיורית באורך k ולכן יש לעבור לפאזה הבאה. בפאזה החדשה: נעדכן את הזרימה ברשת המקורית שנוספה בפאזה הקודמת, ניצור רשת שיורית חדשה וממנה רשת שכבתית חדשה ונתחיל שוב את ה- DFS המשופר לעיל. נכונות: בכל פאזה הרשת השכבתית מכילה רק צמתים וקשתות שיכולים להופיע על מסלולים משפרים באורך k (מספר השכבות). לכן, בסיום הפאזה אין מסלולים משפרים ברשת השכבתית ולכן אין מסלולים משפרים מ- לs סיבוכיות: k? ברשת השיורית באורך -t טענה: מרחק צומת מ- s עולה חלש (השכבה בה יימצא) בכל שיפור. לכן מספר הפאזות יהיה לכל היותר 1 : בסיום פאזה מרחק t מ- s ברשת השיורית גדול ממש מ- k ולכן כך יהיה גם ברשת השכבתית החדשה. יעילות פאזה בודדת: נכנה קשת שמחקנו כקשת חסומה. בין שתי חסימות עוקבות מתבצעות פעולות שזה. מספר החסימות לכל היותר ולכן סה"כ:. סה"כ: - שיפור לעומת.Edmonds Korp רשתות :/ רשתות בהן כל קשת בעלת קיבול 1 (או 0). דיניץ על רשתות כאלה ייקח לפאזה. בתחילת הדרך וכל הקיבולים הם 1 לאורך כל מהלך האלג': אם נמצא מסלול משפר, כל הקשתות עליו נהיות רוויות ולכן כולן יוצאות מהרשת השיורית וכל הקשתות ההפוכות נכנסות אליה עם קיבול שיורי 1. כל קשת מקורית או הפוכתה נמצאות תמיד ב- עם קיבול 1, ובכל קשת הזרימה בכל שלב היא או 0 או 1. בביצוע Augment מוחקים / חוסמים k קשתות, עלות הפעולה. בין Augment אחד לשני מספר הצעדים פרופורציונלי ל- k +מספר הקשתות שנמחקו בגלל צמתים תקועים. לפיכך דיניץ רץ בזמן ברשתות אלו. באופן כללי מספר הפאזות ברשת 0/1 הוא. כך נקבל: במקרה הכללי:. רשת מטיפוס 1: רשת ללא קשתות מקבילות או אנטי-מקבילות (יכול להתקבל כאשר מפצלים קשת בעלת קיבול גדול מ- 1 כדי להפוך, כי יש פאזות. רשת לרשת 0/1), כי יש פאזות. רשת מטיפוס 2: רשת בה כל צומת בעל דרגת כניסה 1 או דרגת יציאה 1, הערה: טיפוס הרשת נשמר גם ברשת השיורית. זיווג מקסימלי: לכל הצמתים ב- X,Y s,t בצמתים. האלג': מחברים זרות צריך למצוא אוסף מקסימלי של קשתות ב- E,, גרף דו צדדי, G בהתאמה, נותנים קיבול 1 לכל קשתות הגרף ובודקים זרימה מקסימלית. קשתות רוויות מהוות זיווג מקסימלי. זרימה היא זיווג כי דרך כל קשת רוויה זורם 1. כיוון שהרשת מטיפוס 2 (דרגת כניסה/יציאה 1 לכולם פרט ל- s,t ), אין 2 קשתות מאותו צומת ב- X או לאותו צומת ב- Y. עלות: ע"י שימוש בדיניץ.

הזיווגים האפשריים, בעלי קיבול.Y הרשת היא מטיפוס. או, האם בהכרח. ש, אלt ל. מהנחת. אם. מכ. 14 משפט :Hall יהי G גרף דו"צ,., לכל נסמן Γ את קבוצת השכנים ב- Y של כל הצמתים מ- A, ונניח. אז: ל- G קיים זיווג מושלם (זיווג בגודל. : Γ ( תרגילים וטענות (מהתרגול): בעיית הזיווג המקסימלי: בהינתן קבוצת בנים X, קבוצת בנות Y וקבוצת שידוכים אפשריים, מהו הזיווג המקסימלי האפשרי (זיווג שלם הוא - min, זיווג בו כל בן משודך וכל בת משודכת). פתרון: יוצרים גרף דו"צ ומוסיפים צמתים s :s,t יוחבר בקשתות עם קיבול 1 לכל t X, יוחבר בקשתות עם קיבול 1 לכל Y יהיו קשתות בין X ל- נמצא זרימה מקסימלית, והיא תתן את הזיווג. נכונות: כל בן ב- X יכול לקבל זרימה 1 לכל היותר, ולכן יכול להעביר זרימה 1 לכל היותר. לכן לא יתכן מצב של זיווג בן אחד לשתי בנות. באופן 2 ולכן סיבוכיות:. דומה כל בת תזווג לבן יחיד כי יכולה להעביר ל- t זרימה לכל היותר בגודל 1 בהינתן גרף מכוון G, רוצים למצוא תת גרף שלכל הקודקודים דרגת הכניסה היא 1 ודרגת היציאה היא 1 להראות שלא קיים כזה. פתרון: יוצרים שני שכפולים ל- V :., יוצרים מהם גרף דו"צ: לכל קשת מקורית, יוצרים קשת, בעלת קיבול בגודל 1. נמצא זיווג מקסימלי לקבוצת הקשתות שבנינו. אם מצאנו זיווג שלם אזי יש תת גרף כך לכל קודקוד דרגת היציאה = דרגת הכניסה = 1. נתונים k מטוס ם, n טייסות, mי מטוסים ימריאו במקביל. דיילים. רוצים למצוא שלשות (כאשר טייסות בוחרות מטוסים וגם דיילים בוחרים מטוסים) כך שמקסימום פתרון: מחברים s לכל הטייסות; מחברים את n הטייסות ל- k המטוסים לפי הנתונים; מחבר םי את k המטוסים לעותק נוסף של k המטוסים ; מחברים את העותק הנוסף ל- m הדיילים לפי הנתונים; מחברים את הדיילים ל- t. נותנ םי נקבל מספר מקסימלי של שלשות של טייסת,מטוס,דייל. לכל הקשתות קיבול 1 ובודקים זרימה מקסימלית. כך יש ברשת זרימה שערכה? 700 נתונה רשת זרימה שערכה 1000 פתרון: כן. בונים מהרשת הישנה רשת חדשה שכל ההבדל הוא שיש קשת בעלת קיבול 700 מ- 't הוא הבור החדש ברשת החדשה. ה- min cut ברשת החדשה הוא 700 כי ה- min cut ברשת הישנה, השווה ל- max flow באותה רשת, היה לפחות 1000. לכן ברשת החדשה יש זרימה מקס' של 700. כיוון שמ- t יוצאת קשת אחת עם זרימה 700 ל-' t, משימור הזרימה נובע שחייב להיכנס ל- t 700 פיכך ניתן להעביר ברשת המקורית 700 ל- t. נתונה רשת זרימה מכוונת עם קיבולים על הקשתות וזרימה מקסימלית f. לתאר אלג' הבודק האם קיימת ברשת קשת שהגדלת קיבולה תגדיל את הזרימה המקסימלית. פתרון: קיים שיפור רק אם יש מסלול בזרימה המקסימלית בו יש קשת אחת בלבד רוויה (ושאר הקשתות על אותו מסלול לא). נעבור על כל הקשתות ונחזיק בהם שדה האם הן רוויות או לא. כעת נפתור ע"י BFS מ- s אם: אחרת נחזיר שלא קיים שיפור. המחסנית מתחזקת האם מסלול עד כה הוא רווי או לא. נתקלים בקשת רוויה, ולא נתקלנו בכזו עד כה, נוסיפה למחסנית. נתונה רשת זרימה בה כל הקשתות בעלות קיבולים זוגיים פרט לאחת e בעלת קיבול אי זוגי. נתונה זרימה מקסימלית בגודל אי זוגי. האם בהכרח e רוויה? פתרון: כן. אם נניח בשלילה שלא, אז ניתן להקטין את קיבול אותה קשת לזוגי ועדיין לקבל את אותה זרימה מקסימלית. לפי MCMF גודל החתך המינימלי הוא גודל הזרימה המקסימלית. כיוון שכל החתכים כעת הם בגודל זוגי, בפרט גם המינימלי ולכן גם הזרימה המקסימלית בסתירה. נתון גרף G ושני צמתים.s,t רוצים למצוא מס' מקסימלי של מסלולים זר בקשים תות מ- s ל- t. פתרון: ניתן לכל קשת קיבול 1 ונמצא זרימה מקסימלית. נכונות: אם יש k מסלולים זרים, אז נזרים 1 על כל אחד מהמסלולים, ולא חרגנו מהקיבולים כיוון שהם מסלולים זרים. נקבלש-. כעת נניח באינדוקציה שעבור 1 מתקיים : נוכיח נכונותל-. מוחקים את הקשתות שהזרימה בהן 0, ונשאר םי עם. כיוון שהזרימה גדולה מאפס, קיים מסלול מ- s אל t. נבחר כזה ונמחק אותו ונקבל. לכן l. זרים, ובתוספת המסלול שהורדנו יש בדיוק מסלולים האינדוקציהיש 1 1 משפט מנגר לקשתות: בגרף מכוון, s,t צמתים, המס' המקסימלי k של מסלולים זרים בקשתות שווה למס' המינימלי l של קשתות ש שי למחוק כדי לנתק את s מ- t. הוכחה: כיוון שחייב םי למחוק לפחות קשת אחת מכל אחד מהמסלולים הזרים. כיוון ש: זרימה מקסימלית = k לפי תרגיל קודם. כמו כן לפי MCMF זה שווה לקיבול החתך המינימלי. כיוון שכל הקיבולים הם 1, זה בעצם שווה למס' המינימלי של קשתות (בחתך המינימלי) נמחק קשתותאלו ננתק את S מ- T ולכן את s מ- t אן ש-.

15 נתון גרף לא מכוון G רוצים לכ, פתרון: נבנה גרף דו"צ בו בצד אחד כל וונו כך שלכל צומת תהיה דרגת יציאה לכל היותר 3, או להגיד שלא ניתן לבנות כזה. הצמתים מ- V, בצד שני צמתים חדש םי צומת לכל., נחבר s לכל עם קיבול 3, נחבר כל, אל e כך ש-, עם קיבול 1, ונחבר כל e ל- t עם קיבול 1. נמצא זרימה מקסימלית ונטען שקיים פתרון אמ"מ.נניחשקייםפתרוןכנדרש,אזילכל, נכוון מ- u אל v ונזרים 1 על,, ואם מ- v אל u: נזרים 1 על., נשלים את הזרימה מ- sאל :t. דרגת יציאה של כל קודקוד עד 3, ולכן כל קודקוד משתתף בעד 3 מסלולי זרימה כמתואר. לכן הזרימה על הקשתות, לכל היותר 3. כיוונו את כל הקשתות ולכן יזרים 1 על כל הקשתות, ונקבל כיוון שני באופן דומה.. תכנות דינאמי: תחליף לגישה רקורסיבית לפתרון בעיות, כאשר הפתרון הרקורסיבי יקר מדי כי הוא נתקל שוב ושוב באותן תתי בעיות ושוב ושוב פותר אותן. למשל, מספרי פיבונצ'י: הגיש הרקורסיבית מחשבת לכל n את כל מספרי הפיבונצ'י שקדמו לו, זמן ריצה אקספוננציאלי. הגישה האיטרטיבית לעומת זאת תבצע חישוב לינארי: כל צעד לחישוב בדרך ל- תחשב על בסיס החישובים הקודמים, כאשר מתחילים מ-, ידועים. כפל מטריצות יעיל: נתונה סדרה של מטריצות,, לאו דווקא ריבועיות, כאשר כל מטריצה היא מסדר (מספר הטורים של שווה למספר השורות של. המכפלה היא מטריצה מסדר. בגלל אסוציאטיביות של כפל מטריצות, ניתן לכפול לפי איזה סדר שנרצה, כאשר ברירת המחדל היא:. המטרה: מציאת סדר הכפלה עם מספר מינימלי של פעולות כאשר מחיר כפל בודד של מטריצה במטריצה הוא. עבור כל סדר הכפלה נייצג עץ בו העלים הם המטריצות. למשל: ייוצג ע"י: נסמן ב-, את המחיר המינימלי למכפלת המטריצות,,,, ומתקיים:, min,, החלוקה שתתן עלות מינימלית המחושבת ע"י העלות המינימלית של כל חלק + עלות מכפלת שתי המטריצות שנקבל מחלוקה זו. מקרה קצה: 0 -, זו מטריצה נתונה ואין מה לחשב. עלות הביצוע הרקורסיבי, הוא:, ונסמן זאת כפונקציה של הפער ולא האינדקסים ממש. בשיטה זו,, 1: ולכל,, 1 נקבל ש-. ~3 בגישת התכנות הדינאמי: יש תתי בעיות, כלומר, ונחשב כל אחת פעם אחת בלבד. בעיה עם הפרש תלויה בתתי בעיות עם הפרש. לכן נחשבן בסדר עולה החל מ- 0 ועד 1. תחילה נותנים ערך 0 לכל., לאחר מכן רצים על כל ההפרשים האפשריים (לכל הפרש l רצים על, לכל i), מאתחלים לערך ורצים בלולאה על k בה מבצעים את החישוב עצמו ועדכון הערך המינימלי ל- ). ), כמו כן מחזיקים שדה, שיחזיק את k עליו פיצלנו. סיבוכיות: במקום :3 לולאה על ההפרש,l הפרש j והפרש.k פתרון רקורסיבי:.top down פתרון דינאמי:.bottom up חישוב תת סדרה משותפת מקסימלית: - תת הסדרה המקסימלית המשותפת היא המודגשת:.BCAB תהיינה 2 סדרות, : נסתכל על האיברים האחרונים של הסדרות,., אם הם שווים, ברור שנשים אותם בתת הסדרה שנבנה. כך ניתן לפתור ברקורסיה בלי האיברים האחרונים. אם הם שונים, אז תת הסדרה המקסימלית תהיה או בין.X של את הרישא ה- i נסמן. ל- או בין ל- תנאי העצירה הוא שאחת מהסדרות הגיע ל-. מספר תתי הבעיות (כולל הסדרות הריקות) הוא 1. 1 שיטת התכנות הדינאמי: נסמן ב-, את תת הסדרה המקסימלית בין., נכין מטריצה המחזיקה את ערכי.LCS האלג' המוצע הוא: במקום לחשב את LCS מפורשות, נחשב רק את האורך ומצביע לאיבר האחרון שלה, ומצביע למקום הקודם במטריצה בעזרתו נבנתה: אם - באלכסון; אחרת או

חי( 16 למעלה במטריצה או שמאלה ),1 או.(, 1 כך זמן הריצה הוא, לעומת אם היינו שומרים בכל שלב את הסדרה במפורש, אז היתה העלות פי m או n יותר יקרה. דוגמא נוספת: פתרון משוואה: נתונים ו- 0,1,,,, ונתונה המשוואה:. פתרון זמן הריצה שלו תלוי ב- n ולא תלוי במספרים הנתונים יהיה אקספוננציאלי (בעיה.(NPC פתרון דינאמי: נכניס פרמטר פתרון הבעיה: על תתי הבעיות נסתכל אם יש פתרון אז.. לקבוע האם קיים פתרון, ולספור את מספר הפתרונות האפשריים.. כאשר 1,,,1,,,, :.(i לכל (הפתרון 0, 0 ו- 1,, 1, 1, נקבל זמן ריצה לעומת 2 בפתרון הנאיבי. טריאנגולציה עם משקל מינימלי: :Minimum weight Triangulation נתון מצולע קמור P עם n קודקודים במישור ע"י העברת מיתרים שלא חוצים זה את זה. נפרק את P ל- 2 משולשים, ונניח לכל משולש Δ יש משקל,Δ כאשר משקל הוא שטח המשולש. משקל הטריאנגולציה הוא סכום משקלי המשולשים, ורוצים למצוא טריאנג' בעלת משקל מינימלי. נניח קודקודי המצולע הם.,, נקח צלע כלשהי, למשל את., למשולש שיושב על e יש קודקוד 1 כך שמשולש זה מחלק את המצולע לשלושה מצולעים: עם k קודקודים. עם 1 קודקודים. המשולש עצמו. מתקיים: טריאנגולציה min מינימלית של. כל תת מצולע שמתקבל נפצל במיתר שממנו קיבלנו אותו (זה המשותף למשולש ), וכך יובטח שכל תת מצולע לאורך הרקורסיה מורכב מחלק רציף משפת P (המצולע המקורי) + מיתר. נתאר את 'P ע"י, והכוונה ששפתו היא מקודקוד עד קודקוד נגד כיוון השעון. ישנם תת מצולעים. אילוצים:. אם 1 אז המצולע הוא צלע בודדת ומשקלו 0. אם 2 אז המצולע הוא משולש, ואין מה להיכנס ברקורסיה נחזיר את משקלו. נסמן באופן כללי:. min כעת נפתור את הבעיות לפי ההפרש. עבור הפרש., 0,1 עבור הפרש 21 : נרוץ על 1 ונגדיר:, min, כאשר בין i ל- k ובין k ל- ההפרש קטן מ- j. סיבוכיות: (לולאות על (,, לעומת אקספוננציאלית. תרגילים (מהתרגול): נתונהסדרהמספרים,,, רוצים למצוא תת סדרה רציפה בעלת סכום מקסימלי. פתרון: נחשב לכל i את: הבא: מתחילים כ ם תו ס= ת הסדרה הרציפה המקסימלי עד יב להכיל אותו); max, חדשה או=, לבסוף ניקח את המקסימום מבין. max,, מ. תו סכום רק עד., ואז מסיים את תת הסדרה. נמשיך כך אחורה לקבלת כל הסדרה. פתרון בזמןלינארי. מ- אחורה ומציאת i כך ש- בעייתהסוכן הנוסע: נתון גרף לא מכוון עם משקלות אי-שלילי רים. פתרון: נניח שפתרון זה הוא.OPT נמצא מעגל שמשקלו לכל היותר 2 מ. קשת אנטי-מקבילה כדי שנוכל לנוע במעגל (בכל קשת נשתמש פעם אחת בדיוק) בגודל.2 2 כ. כעת חישוב האיבר ציאת תת הסדרה ע"י הליכה וצים למצוע מעגל פשוט במשקלמינימלי העובר דרך כל הקודקודים. שתמשים בעובדה ש- ולכן ניקח עפ"מ, לכל קשת נוסיף ל קודקוד בדרגה זוגית ולכן קיים מעגל אויילר. הפתרון שלנו הוא

כתy 17 התאמת מחרוזות: :String/Pattern Matching הקלט הוא: מחרוזת טקסט T, מחרוזת תבנית P. רוצים לחפש איפה (אם בכלל) מופיעה P ב- T. נסמן ב- n את אורך T, וב- m את אורך P. נגיד ש- P מופיע במקום ה- i של T אם:.,, הערה: מותרת חפיפה חלקית של התאמות. פתרון נאיבי: לנסות את כל התזוזות האפשריות, לוקח זמן. להלן פתרון ב- : נניח P,T מורכבות מ-, בלבד. לאחר השוואה ראשונה, נבצע בהסתברות אחריו) וכן הלאה. תוחלת מספר ההשוואות בתזוזה אחת: בערך 2. השוואה נוספת (לתו הבא), ובהסתברות השוואה נוספת (לתו אם בתזוזה מסויימת הצלחנו להתאים רישא של P שהוא,1, נחפש תזוזה מינימלית 0 בה יש התלכדות בין רישא כלשהי של 1, לסיפא - הרישא המתאימה היא.1,4 במקרה זה AB היא רישא המתלכדת עם סיפא של אותה מחרוזת.1, למשל: לכן התזוזה הנדרשת לבדיקה הבאה היא 2 (ואז במקרה זה לאותה תזוזה גם תהיה התאמה). נכין טבלה שלכל רישא 1, של P, נדע מה גודל הרישא המקסימלי של 1, שהוא גם סיפא של.1, נסתכל על i שהוא האינדקס המסיים את תת המחרוזת עליה מסתכלים, על שהוא גודל אותו רישא של 1, שהוא גם סיפא, והתזוזה הנדרשת תהיה:. לאחר חישוב, נחזיק אינדקס q שיהיה: כמה תוים של p כבר מותאמים בהזזה הנוכחית. נבצע השוואות ל- 1... 1? 2,? עד שנכשל או עד סוף.P נניח k הוא אורך הרישא שהתאמנו, אז נקח את מתוך הטבלה ונשים ב- q. כדי לנצל את מירב האינפורמציה על כישלון בבדיקה מסויימת לקראת ההזזה והבדיקה הבאה, נחזיק טבלה, שתחזיק את גודל הרישא המקסימלית שהיא גם סיפא של 1, (שרשור עם a, תו מהא"ב של (P,T לכל a בא"ב. ניתנת לחישוב מתוך טבלה זו. ניתן להסתכל על האלג' כעל אוטומט סופי: אוטומט בעל,,0,1 מצבים. האוטומט קורא את T, וכאשר נמצא במצב k וקורא את a, עובר למצב,, עד שמגיע למצב מקבל שהוא m. כשנגיע ל- m נודיע על הצלחה ונמשיך לרוץ עד סוף T. אופן פעולת האוטומט: כשהאוטומט במצב q q התוים האחרונים שקראנו מ- T מתאימים ל- q התוים הראשונים שקראנו מ- P. מעבר : עוברים למצב k כאשר k הוא גודל הרישא המקסימלית של P שהיא גם סיפא של (a 1, התו הבא מתוך T כמו לעיל). אם אז 1 -, יש לנו התאמה בתו נוסף ונתקדם. אם לא, נעבור לאותו k המתואר לעיל (חיפוש התאמה חדשה). האלגוריתם של :(KMP) Knuth Morris Pratt דומה לרעיון האוטומט אך ללא תלות באות הקלט הבאה (a לעיל). נסתכל על רישא קטנה בתו אחד: במקום להסתכל על k שהוא הרישא המקסימלי המתאים לסיפא של,1, נסתכל על 1 1, 1 : שהוא סיפא של 1, (ללא a). מעבר יוגדר שוב: נעבור למצב ה- k אם 1, 1 הוא סיפא של.1, כמו פונקצית שהוגדרה בהתחלה. סיבוכיות: חישוב. : לולאת ה- while בחישוב לא תתבצע יותרמ- 1 פעמים, ולכן זמן החישוב הוא. הפרוצדורה הראשית לוקחת זמן. סה"כ: ללא תלות בגודל הא"ב. רוצים, תרגילים (מהתרגול): נתונה מחרוזת T למצוא את הרישא המקסימלית של T שהיא פלינדרום באופן יעיל. פתרון: נרשוםאת ואנו רוצ םי מקסימלי. נסתכל על:, ובעצם רוצים את רישא מקסימלית של T שהיא גם סיפא של. נריץ KMP עם טקסט ותבנית T אם. נסמן את אורך הרישא המקסימלית של P שהוא סיפא של 1, ב- אז, האורך שרוצים הוא. 2 זמן הריצה:. תהי T באורך לפחות 10 רוצ, פתרון: בכל חלוקה כזו מתקיים: אורך ההתאמה. רוצים למצוא חלוקה כך ש- פתרון: מריצים KMP היy ים למצוא חלוקהכךש- 10, מקסימלי. KMP נריץ. עם התוים האחרונ ם של Tי א תת מחרוזת של x (אם קיימת). כטקסט ו- 1, כתבנית. עם טקסט T ממקום 1 יתן את המקסימלית עד מקום n, עם התבנית 1, (כל הטקסט) כדי למצוע חלוקה עם x מקסימלי. לאחר מכן נריץ KMP עם x כטקסט ו- בנית כדי לבדוק אם y תת מחרוזת של x.